/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.lsi.sistemasdevendas.dao;

import br.com.lsi.sistemasdevendas.interfaces.CrudInterface;
import br.com.lsi.sistemasdevendas.model.Usuario;
import br.com.lsi.sistemasdevendas.util.ConnectionFactory;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Wagner
 * @since 08/09/2014
 */
public class UsuarioDao implements CrudInterface{
    
   private Connection connection ;

   public UsuarioDao() {
    
   }
    
    @Override
       public void salvar(Usuario usuario) {

        try {
            connection = ConnectionFactory.getConnection();
    
            // definir o comando SQL
            String sql = "INSERT INTO Usuarios (nome, cpf, telefone,endereco, cidade, cep,bairro, uf) VALUES (?,?,?,?,?,?,?,?)";
            // obter statement a partir da conex�o
            PreparedStatement st = connection.prepareStatement(sql);
            // preencher statement
            st.setString(1, usuario.getNome());
            st.setString(2, usuario.getCpf());
            st.setString(3, usuario.getTelefone());
            st.setString(4, usuario.getEndereco());
            st.setString(5, usuario.getCidade());
            st.setString(6, usuario.getCep());
            st.setString(7, usuario.getBairro());
            st.setString(8, usuario.getUf());
            
            
            // executar comando
            st.executeUpdate();

        } catch (Exception e) {
            e.printStackTrace();
            
            
        } finally {

            try {
               connection.close();
            } catch (SQLException ex) {
                Logger.getLogger(FuncionarioDao.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
        
    }

        
       
    
    
   
    public void alterar(Usuario usuario) {

        try {
            connection = ConnectionFactory.getConnection();
        
            String sql = "UPDATE Usuarios SET nome = ?, cpf = ?, telefone = ?,endereco = ?, cidade = ?, cep = ?,bairro = ?, uf = ? WHERE idUsuarios = ?";
            // obter statement a partir da conex�o
            PreparedStatement st = connection.prepareStatement(sql);
            // preencher statement
            
            st.setString(1, usuario.getNome());
            st.setString(2, usuario.getCpf());
            st.setString(3, usuario.getTelefone());
            st.setString(4, usuario.getEndereco());
            st.setString(5, usuario.getCidade());
            st.setString(6, usuario.getCep());
            st.setString(7, usuario.getBairro());
            st.setString(8, usuario.getUf());
            st.setInt(9, usuario.getIdUsuario());
            
            // executar comando
            st.executeUpdate();
            
        } catch (Exception e) {
e.printStackTrace();
        } finally {

           
            try {
                connection.close();
            } catch (SQLException ex) {
                Logger.getLogger(UsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
            }
            

        }
        
       
       

    }

    @Override
    public void excluir(Usuario usuario)  {

        try {

          connection = ConnectionFactory.getConnection();  
            
            // definir o comando SQL
            String sql = "DELETE FROM Usuarios WHERE idUsuarios = ?";
            // obter statement a partir da conex�o
            PreparedStatement st = connection.prepareStatement(sql);
            // preencher statement
            st.setInt(1,usuario.getIdUsuario());
            // executar comando
            st.executeUpdate();

        } catch (Exception e) {
            e.printStackTrace();
           
        } finally {
            try {
                connection.close();
            } catch (SQLException ex) {
                Logger.getLogger(UsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
        
    }
   
   
    @Override
    public List<Usuario> listar()  {

        List<Usuario> lista = new ArrayList<Usuario>();

        try {
            connection = ConnectionFactory.getConnection();
 // definir o comando SQL
            String sql = "SELECT * FROM Usuarios";
            // obter statement a partir da conex�o
            PreparedStatement st = connection.prepareStatement(sql);

            // executar comando
            ResultSet rs = st.executeQuery();

            while (rs.next()) {

                Usuario usuario = new Usuario();

                
                usuario.setNome(rs.getString("nome"));
                usuario.setCpf(rs.getString("cpf"));
                usuario.setTelefone(rs.getString("telefone"));
                usuario.setEndereco(rs.getString("endereco"));
                usuario.setCidade(rs.getString("cidade"));
                usuario.setCep(rs.getString("cep"));
                usuario.setBairro(rs.getString("bairro"));
                usuario.setUf(rs.getString("uf"));
                usuario.setIdUsuario(rs.getInt("idUsuarios"));

                lista.add(usuario);
            }

            return lista;

        } catch (Exception e) {
            e.printStackTrace();
         return null;   
        } finally {
            try {
                connection.close();
            } catch (SQLException ex) {
                Logger.getLogger(UsuarioDao.class.getName()).log(Level.SEVERE, null, ex);
            }

        }

    }

    

    
    

}
